<?php

class PlanoSaude_InsereController extends Zend_Controller_ActionAquiles {

    public function init() {
        parent::init();
        $this->view->title = 'Adição de Plano de Saúde.';
    }
    
    public function indexAction() {
        $this->view->form = new Application_Form_PlanoSaude_Insere();
    }

    public function validaAction() {
        $resp = new Util_Function_JsonResponse();
        $form = new Application_Form_PlanoSaude_Insere();
        $form->setDefaults($this->_request->getPost());

        $nome = $form->descricao->getValue();
        if (!isset($nome)) {
            $resp->addErro(utf8_encode("A 'Descrição' é obrigatória."));
        }

        echo Zend_Json::encode(array("erros" => $resp->getErros()), Zend_Json::TYPE_OBJECT);
        die();
    }

    public function novoAction() {
        $codigo = $this->_request->getParam('codigo');
        $form = new Application_Form_PlanoSaude_Insere($codigo);
        $model = Application_Model_PlanoSaude::getInstance();
        $form->setDefaults($this->_request->getPost());
        
        //limpa msgs da session
        $session = new Zend_Session_Namespace('msg');
        $session->unsetAll();
        
        $atividades =  Array();
        $codPlano =  Array();
        foreach ($this->_request->getPost() as $key => $value) {
            if(strpos($key,'atividade') !== false){
                $atividades[substr($key, strpos($key, '_')+1)]= $value;
            }else if(strpos($key,'codigo_plano_') !== false){
                if(empty($value)){
                    $value = 'null';
                }
                $codPlano[substr($key, strpos($key, '_',9)+1)] = $value;
            }
        }
        
        if(isset($codigo)){
            $model->update($form->getValues());
            $msg['msg1'] = 'Plano de Saúde modificado com sucesso.';
            $this->editaPrecoAtividade($atividades,$codPlano,$codigo);
        }else{
            $codigo = $model->insert($form->getValues());
            $this->insertPrecoAtividade($atividades,$codPlano,$codigo);
            $msg['msg1'] = 'Plano de Saúde adicionado com sucesso.';
        }
        
        
        $modelAtividade = Application_Model_Atividade::getInstance();
        
        
        
        $session->msgs =$msg;
        $this->_helper->redirector('index','consulta','planoSaude');
    }

    public function deleteAction() {
        $codigo = $this->_request->getParam('codigo');
        if(is_numeric($codigo)){
            $model = Application_Model_PlanoSaude::getInstance();
            $model->remove($codigo);
            
            $modelPreco = Application_Model_PrecoAtividade::getInstance();
            $modelPreco->removeByPlanoSaude($codigo);
            
            $msg['msg1'] = 'Plano Saúde excluído com sucesso.';
            $session = new Zend_Session_Namespace('msg');
            $session->msgs =$msg;
        }else{
            $msg['delete1'] = 'Não foi possível excluir o Plano Saúde.';
            $session = new Zend_Session_Namespace('erros');
            $session->erros =$msg;
        }
        
        $this->_helper->redirector('index','consulta','planoSaude');
    }

    public function validaRemocaoAction(){
        $codigo = $this->_request->getParam('codigo');
        $resp = new Util_Function_JsonResponse();
        $count = null;
        if(isset($codigo)){
            $count = Application_Model_PlanoSaudeUsuario::getInstance()->getQntUsuarioByPlanoSaude($codigo);
        }else{
            $resp->addErro('É necessário enviar um código');
        }
        
        if(isset($count) && count($count) > 0){
            if($count['qnt'] > 0){
                $resp->addErro('O plano de saúde selecionado é utilizado por clientes, modifique o cadastro dos clientes para excluí-lo.');
            }
        }
        
        echo Zend_Json::encode(array("erros" => $resp->getErros()), Zend_Json::TYPE_OBJECT);
        die;
    }
    
    private function insertPrecoAtividade($atividades,$codPlano,$codPlanoSaude){
        $model = Application_Model_PrecoAtividade::getInstance();
        $filter = new Zend_Filter_Money();

        foreach ($atividades as $key => $value) {
            $obj = Array();
            $obj['atividade'] = $key; 
            $obj['plano_saude'] = $codPlanoSaude;
            $obj['codigo_plano'] = $codPlano[$key];
            $obj['valor'] = $filter->filter($value);
            $model->insert($obj);  
        }
    }
    
    private function editaPrecoAtividade($atividades,$codPlano,$codPlanoSaude){
        $model = Application_Model_PrecoAtividade::getInstance();
        $atiExist= $model->getByPlanoSaude($codPlanoSaude);
        
        
        $filter = new Zend_Filter_Money();
        foreach ($atividades as $key => $value) {
            $valorEua = $filter->filter($value);
            $atualizado = false;
            foreach ($atiExist as $index => $item) {
                if($item['atividade'] == $key && $item['plano_saude'] ==  $codPlanoSaude){
                    $item['valor'] = $valorEua;
                    $item['codigo_plano'] = $codPlano[$key];
                    $model->update($item);
                    $atualizado = true;
                }
            }
            if(!$atualizado){
                $obj = Array();
                $obj['atividade'] = $key; 
                $obj['plano_saude'] = $codPlanoSaude;
                $obj['valor'] = $valorEua;
                $obj['codigo_plano'] = $codPlano[$key];
                $model->insert($obj);  
            }
        }
        
        foreach ($atiExist as $existe) {
            $excluir = true;
              
            foreach ($atividades as $key => $value) {
                if($key == $existe['atividade']){
                    $excluir = false;
                    break;
                }
            }
            
            if($excluir){
                $model->removeByAtivPlano($existe['atividade'],$existe['plano_saude']);
            }
            
        }
    }
}